`include "lib/defines.vh"

//*
// 作用范围：
//  - input wire 和 output wire：定义模块与外部的接口信号。
//  - wire：定义模块内部的连线信号。
// 声明位置：
//  - input wire 和 output wire：必须在模块端口列表中声明。
//  - wire：可以在模块内部的任何地方声明。
// 信号方向：
//  - input wire：信号从外部传入模块。
//  - output wire：信号从模块传出到外部。
//  - wire：没有方向性，仅用于模块内部连接。
//*

module mycpu_top(
    input wire clk,                      // 时钟信号输入
    input wire resetn,                   // 复位信号输入（低电平有效）
    input wire [5:0] ext_int,            // 6位外部中断信号输入

    output wire inst_sram_en,            // 指令SRAM使能信号输出
    output wire [3:0] inst_sram_wen,     // 指令SRAM写使能信号输出（4位）
    output wire [31:0] inst_sram_addr,   // 指令SRAM地址信号输出（32位）
    output wire [31:0] inst_sram_wdata,  // 指令SRAM写数据信号输出（32位）
    input wire [31:0] inst_sram_rdata,   // 指令SRAM读数据信号输入（32位）

    output wire data_sram_en,            // 数据SRAM使能信号输出
    output wire [3:0] data_sram_wen,     // 数据SRAM写使能信号输出（4位）
    output wire [31:0] data_sram_addr,   // 数据SRAM地址信号输出（32位）
    output wire [31:0] data_sram_wdata,  // 数据SRAM写数据信号输出（32位）
    input wire [31:0] data_sram_rdata,   // 数据SRAM读数据信号输入（32位）

    output wire [31:0] debug_wb_pc,      // 调试用的写回阶段程序计数器输出（32位）
    output wire [3:0] debug_wb_rf_wen,   // 调试用的寄存器文件写使能信号输出（4位）
    output wire [4:0] debug_wb_rf_wnum,  // 调试用的寄存器文件写入寄存器编号输出（5位）
    output wire [31:0] debug_wb_rf_wdata // 调试用的寄存器文件写入数据输出（32位）
);

    wire [31:0] inst_sram_addr_v, data_sram_addr_v;

    mycpu_core u_mycpu_core(
    	.clk               (clk               ),
        .rst               (~resetn           ),
        .int               (ext_int           ),
        .inst_sram_en      (inst_sram_en      ),
        .inst_sram_wen     (inst_sram_wen     ),
        .inst_sram_addr    (inst_sram_addr_v  ),
        .inst_sram_wdata   (inst_sram_wdata   ),
        .inst_sram_rdata   (inst_sram_rdata   ),
        .data_sram_en      (data_sram_en      ),
        .data_sram_wen     (data_sram_wen     ),
        .data_sram_addr    (data_sram_addr_v  ),
        .data_sram_wdata   (data_sram_wdata   ),
        .data_sram_rdata   (data_sram_rdata   ),
        .debug_wb_pc       (debug_wb_pc       ),
        .debug_wb_rf_wen   (debug_wb_rf_wen   ),
        .debug_wb_rf_wnum  (debug_wb_rf_wnum  ),
        .debug_wb_rf_wdata (debug_wb_rf_wdata )
    );

    mmu u0_mmu(
    	.addr_i (inst_sram_addr_v ),
        .addr_o (inst_sram_addr   )
    );

    mmu u1_mmu(
    	.addr_i (data_sram_addr_v ),
        .addr_o (data_sram_addr   )
    );
    
    
    
    
endmodule 